//这个文件会帮助我们打包 packages下的模块  最终打包出js文件

// node dev.js  要打包的名字 -f  打包的格式

import minimist from "minimist";
import {resolve,dirname} from "path";
import { fileURLToPath } from "url";
import { createRequire } from "module";
import esbuild from "esbuild";
// node 中的命令函数通过process.argv获取
const args = minimist(process.argv.slice(2));
const __filename =fileURLToPath(import.meta.url); // 获取文件的绝对file:
const __dirname = dirname(__filename); // 获取文件的绝对路径
const target = args._[0] || "reactivity"; // 默认打包reactivity模块
const format = args.f || "iife"; // 打包后的模块化规范
const require = createRequire(import.meta.url);
console.log(target, format);
// node esm 没有__dirname
// const entry = require(__dirname);


// 获取入口文件
const entry = resolve(__dirname, "../packages", target, "src", "index.ts");
const pkg  = require(`../packages/${target}/package.json`)
console.log(entry,require,'__dirname')

// 根据需要进行打包
esbuild.context({
  entryPoints: [entry],// 入口
  bundle: true, // reactivity 依赖  shared 会打包到一起
  outfile: resolve(__dirname, `../packages/${target}/dist/${target}.js`), // 出口
  platform: "browser", // 打包平台
  sourcemap:true,// 可以调试代码
  format, // 打包后的模块化规范
  globalName: pkg.buildOptions.name, // 打包后的全局变量名
}).then((ctx) => {
    console.log("打包完成")
    return ctx.watch();
})